home *** CD-ROM | disk | FTP | other *** search
-
- PGC Portfolio Graphics Compressed File Specification
- ----------------------------------------------------
- by Don Messerli, Software Vineyard
- Revision 01 1/4/91
-
- Introduction
- ------------
-
- The PGC spec allows graphic files on the Portfolio (formerly called
- PGF files) to be compressed to save disk (RAM Card) space. We
- all know how much RAM cards cost!
-
- A little background
- -------------------
-
- The Portfolio's screen is 240 x 64 pixels when in graphics mode.
- Being monochome, it only takes 1 bit to represent a single pixel.
- Therefore, 8 pixels per byte. A PGF ends up being 64 rows of
- 30 bytes each for a total of 1920 bytes. PGF files could simply
- be copied from video ram to disk and vice-versa.
-
- This was pretty simple. All PGF files were 1920 bytes no matter
- how complex the picture. A real space waster in most cases.
- Compression became a logical next step.
-
- What will compression do?
- -------------------------
-
- Compression can save quite a bit of space. Typically from 20
- to 80% depending on the file. However, because of the compression
- algorithm I have chosen, it is also possible for a file to become
- larger. This happens with files that have a lot of random dots
- on the screen with little repetition. Digitized photos are the
- culprits. Fortunately, because of the small size of the Portfolio
- screen, we probably won't be seeing too many of them.
-
- PGC File Format
- ---------------
-
- Header - The first 3 bytes of the file are the PGC header. This
- is the only way to tell if the file is a PGC file or
- not. This should always be checked when reading PGC
- files. Your decoder routines could take a quick trip
- into never-never land if you try to decode a spreadsheet
- file.
-
- The three bytes that make up the header are the ASCII
- codes for 'P' and 'G' followed by the revision number
- in hex. These three bytes should be:
-
- "\x50\x47\x01"
- P G 01
-
- Data - The picture data is made up of repeating sets of single
- index bytes followed by data bytes. The index byte
- tells the decoder how to handle the data that follows.
- The key is whether the high bit (\x80) is set or not.
- The maximum number of data bytes following an index
- byte is 127.
-
- High Bit Set
- ------------
- If the high bit is set, it indicates that the data is
- a string of identical bytes. The low 7 bits indicate
- how many times to repeat the following byte (maximum is
- 127).
-
- Example: 86 FF
- index data byte
-
- High bit of index byte is set, low 7 bits = 6.
- Repeat data byte (FF) 6 times.
-
- High Bit Not Set
- ----------------
- If the high bit is NOT set, it indicates that the data
- following is a string of unique bytes and should be copied
- as is. The low 7 bits indicate how many bytes to copy (max
- is 127).
-
- Example: 0A FF 01 10 09 1A BB CE D0 FF 1A
- index data bytes
-
- High bit of index byte is NOT set, low 7 bits = 10.
- Copy next 10 bytes as is.
-
-
- Where do we go from here?
- -------------------------
-
- Writing a decoder is fairly straightforward. The following is
- the general algorithm:
-
- do {
- get a byte from PGC image
- if high bit is set
- index = byte - 128
- get data byte
- write data byte, index times
- else
- index = byte
- copy next index # of bytes
- } while less than 1920 bytes written
-
- Writing an efficient compressor is a little more difficult. I
- plan to upload a library of functions in the near future. If
- you encounter difficulty writing a compressor, please contact
- me via electronic mail.
-
-
- What are these other files?
- ---------------------------
- I have included a few PGF files to give your compressors and
- decoders a real workout.
-
- BEST.PGF - This is a pure black image. It should compress down
- to 35 bytes.
-
- WORST.PGF - This image is made up of runs of 2 identical bytes
- alternated with single unique bytes. It should end
- up being larger as a PGC file (2524 bytes) than as
- a PGF file (1920 bytes). All decoders should be able
- to handle this file.
-
-
- In Closing
- ----------
-
- I hope this information is helpful for those writing graphics
- applications for the Portfolio. It is my sincere wish that the
- PGC format is widely supported in the Portfolio arena and that
- it promotes compatibility between graphics applications on the
- Portfolio. My sincere thanks to BJ Gleason for including PGC
- support in PBASIC. That is a major step in making my wish come
- true.
-
- Please support the PGC format whenever possible. If your application
- must output PGF files, because you're trying to write the world's
- smallest TSR (or something) and you can't commit to the overhead
- required by a compressor, that is unavoidable. The PGF files can
- later be compressed with PGCOMP (my compressor). It is still preferable
- to store files that end up larger as PGC files as PGC files anyway.
- This means software only has to worry about reading the PGC
- format.
-
- Versions of PGEDIT greater than 1.10 will read either PGF or PGC files.
- However, they will only save in PGC format. BJ Gleason has indicated
- that PBASIC 3.1 will only read and write PGC files.
-
- If you have any questions, comments, or kind words, please send
- me electronic mail:
-
- Don Messerli
- Compuserve 72500,1671
- GEnie DMESS
-
-
-
-
-
-
-
-